package command;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

import org.uc3m.es.Factory.panel.FactoriaPanel;
import org.uc3m.es.implementacion.ComandoUtilizado;
import org.uc3m.es.implementacion.Command;
import org.uc3m.es.interfaz_grafica.ventana.PanelDibujo;
import org.uc3m.es.interfaz_grafica.ventana.VentanaPrincipal;

import tools.FiltroFicheros;

public class CommandGuardarSecuencia implements Command {

	private PanelDibujo _panel; 
	
	@Override
	public void execute() {
		BufferedWriter escribir = null; 
		Iterator<ComandoUtilizado> it=null;
		String comandos=new String();
		File fichero;
		FileFilter filtro= new FiltroFicheros("Ficheros de comandos(*.clo)", ".clo");
		JFileChooser selectorDeFichero = new JFileChooser(".\\Conf");
		int seleccion=0;
		
		_panel= FactoriaPanel.metodoFactoria();
		selectorDeFichero.addChoosableFileFilter(filtro);
		seleccion=selectorDeFichero.showSaveDialog(VentanaPrincipal.getFrame());
		
		if(JFileChooser.APPROVE_OPTION==seleccion)
		{
			it = _panel.getPilaComandos().iterator();
			while(it.hasNext())
				comandos+=it.next().toString()+"\n";
			try {
				fichero=selectorDeFichero.getSelectedFile();
				
				if(!fichero.getCanonicalPath().endsWith(".clo"))
					fichero= new File(fichero.getCanonicalPath()+".clo");
				
				escribir= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fichero)));
				escribir.write(comandos);
				escribir.close();
				JOptionPane.showMessageDialog(VentanaPrincipal.getFrame(), "Guardado Correcto","Informacion" ,JOptionPane.INFORMATION_MESSAGE );
			} catch (FileNotFoundException e) {
				JOptionPane.showMessageDialog(VentanaPrincipal.getFrame(), "Fichero no encontrado"+e.getMessage(),"CLASS::CommandGuardarSecuencia ERROR::301" ,JOptionPane.ERROR_MESSAGE );
			} catch (IOException e) {
				JOptionPane.showMessageDialog(VentanaPrincipal.getFrame(), "Error en la escritura del fichero","CLASS::CommandGuardarSecuencia ERROR::302" ,JOptionPane.ERROR_MESSAGE );
			}catch(Exception e){
				JOptionPane.showMessageDialog(VentanaPrincipal.getFrame(), "Se ha produciodo una excepcion\nMirar la consola","CLASS::LO::CommandGuardarSecuencia ERROR::303" ,JOptionPane.ERROR_MESSAGE );
				e.printStackTrace();
			}
		}
		
	}

}
